/**
 * @file: JugadorReal.h.
 * @author: Edwin Marcelo Guzman Buezo.
 * @date: MAY-18-2009.
 * @desc: Este archivo contiene la clase Jugador.
 */

#ifndef _JugadorReal_h_
#define _JugadorReal_h_

#include<vector>
#include<string>
#include "Carta.h"
#include "Jugador.h"
using namespace std;

/**
 * La clase JugadorReal tiene metodos para que la persona que quiere jugar
 * pueda realizar sus jugadas.
 */
class JugadorReal: public Jugador{
    public:
        /**
         * Contructor de la Clase con valores de entrada.
         * @param[in] string nombre del jugador.
         * @param[in] int fichas iniciales para el jugador.
         */
        JugadorReal::JugadorReal(string nombre, int fichas);
        
        /**
         * Contructor de la Clase con valores de entrada.
         * @param[in] string nombre del jugador.
         */
        JugadorReal(string nombre);
        
        /**
         * Contructor de la Clase sin valores de entrada.
         */
        JugadorReal();
        
        /**
         * Sirve para pasar el turno a cada uno de los jugadores
         * el jugador que ejecuta esto significa que es su turno
         * y podra realizar su jugada.
         * @param[out] int apuesta actual de la mesa.
         * @param[in] vector<Carta*> cartas de la mesa.
         * @param[out] int monto total hasta el momento que aposto este jugador.
         * @return que jugada se realizo 0=RETIRARSE, 1=PASAR, 2=APOSTAR, 3=ALLIN, 4=ERROR.
         */
        JUGADA jugar(int& apuestaActual,vector<Carta*> cartasEnMesa,int& apuestaDeEsteJugador);
        
        /**
         * Valida el comando que ingreso el jugador.
         * @return bool retorna si comAux paso la prueva, true = si paso, false = no paso.
         */
        bool validarComando(string comAux);
        
        /**
         * Lee el comando que introduce el jugador al que le pertenece esta
         * clase.
         * @param[in] vector<Carta*> cartas de la mesa.
         */
        void leerComando(vector<Carta*> mesa,int apuestaActual,int apuestaDeEsteJugador);
        
        /**
         * Ejecuta el comando que ingreso el jugador.
         * @param[out] int apuesta actual de la mesa.
         * @param[in] vector<Carta*> cartas de la mesa.
         * @param[out] int monto total hasta el momento que aposto este jugador.
         * @return que jugada se realizo 0=RETIRARSE, 1=PASAR, 2=APOSTAR, 3=ALLIN, 4=ERROR.
         */
        JUGADA ejecutarComando(int& apuestaActual,int& apuestaDeEsteJugador);
        
        /**
         * Cambia el comando que ejecutara el JugadorReal
         */
        void setComando(string comando);
        
        /**
         * Retorna el comando que decea ejecutar el JugadorReal.
         */
        string getComando();
    private:
        /**
        * comando es la accion que quiere realizar el jugador.
        */
        string _comando;
};
#endif // _JugadorReal_h_
